//:C05:TemplateFunctionAddress.cpp
// Taking the address of a function generated
// from a template.
template<typename T> void f(T*){}
void h(void(*pf)(int*)){}
template<typename T> void g(void (*pf)(T*)){}

int main(void) {
  h(&f<int>);   // Full type specification
  h(&f);        // Type deduction
  g<int>(&f<int>);   // Full type specification
  g(&f<int>);      // Type deduction
  g<int>(&f);      // Partial (but sufficient) specification  
}